(eval '(define (cons x y)
         (raw-cons 'lazy-pair (lambda (m) (m x y))))
      the-global-environment)

(eval '(define (car z)
         (if (lazy-pair? z)
             ((raw-cdr z) (lambda (p q) p))
             "Cannot operate car on non-pair object"))
      the-global-environment)

(eval '(define (cdr z)
         (if (lazy-pair? z)
             ((raw-cdr z) (lambda (p q) q))
             "Cannot operate car on non-pair object"))
      the-global-environment)

(eval '(define (list-ref items n)
         (if (= n 0)
             (car items)
             (list-ref (cdr items) (- n 1))))
      the-global-environment)

(eval '(define (map proc items)
         (if (null? items)
             '()
             (cons (proc (car items))
                   (map proc (cdr items)))))
      the-global-environment)

(eval '(define (scale-list items factor)
         (map (lambda (x) (* x factor))
              items))
      the-global-environment)

(eval '(define (add-lists list1 list2)
         (cond ((null? list1) list2)
               ((null? list2) list1)
               (else (cons (+ (car list1) (car list2))
                           (add-lists (cdr list1) (cdr list2))))))
      the-global-environment)